package com.lantosec.hmrp.modules.supplier.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.lantosec.hmrp.core.kit.PageVO;
import com.lantosec.hmrp.core.kit.Result;
import com.lantosec.hmrp.modules.supplier.entity.*;
import com.lantosec.hmrp.modules.supplier.vo.SupplierInfoVO;

import java.util.List;

/**
 * <p>
 * 供应商信息 服务类
 * </p>
 *
 * @author AutoCode
 * @since 2020-02-20
 */
public interface ISupplierInfoService extends IService<SupplierInfo> {

    /**
     * 根据条件查询供应商信息（分页）
     *
     * @param page
     * @param supplierName
     * @param supplierType
     * @param entryState
     * @return
     */
    public PageVO<SupplierInfoVO> querySupplierInfoAll(PageVO<SupplierInfo> page, String supplierName, String supplierType, String entryState);

    /**
     * 分页查询本部门下的供应商信息
     *
     * @param page
     * @param supplierName
     * @param supplierType
     * @param deptId
     * @return
     */
    public PageVO<SupplierInfoVO> querySupplierInfoByDept(PageVO<SupplierInfo> page, String supplierName, String supplierType, String deptId);

    /**
     * 查询当前用户名的部门id
     *
     * @param userId
     * @return
     */
    public String getDeptId(String userId);

    /**
     * 查询供应商详情信息
     *
     * @param supplierCode
     * @return
     */
    public SupplierInfoVO querySupplierInfoById(String supplierCode, String entryState);

    /**
     * 新增供应商信息
     *
     * @param supplier
     * @return
     */
    public String insertSupplierInfo(Supplier supplier);

    /**
     * 编辑供应商信息
     *
     * @param supplier
     */
    public void updateSupplierInfoAll(Supplier supplier);

    /**
     * 新增供应商类型信息
     *
     * @param supplier
     * @return
     */
    public String insertSupplierInfoType(Supplier supplier);

    /**
     * 查询相对应供应商类型下的供应商编码
     *
     * @return
     */
    public PageVO<YyGyslist> querySupplierCode(PageVO<YyGyslist> page, String typeId, String name);


    /**
     * 查询全部供应商类型
     *
     * @return
     */
    public List<YyGyslist> querySupplierType();

    /**
     * 查询系统全部供应商信息
     *
     * @return
     */
    public List<SupplierInfo> queryAll();

    /**
     * 查询当前是否已存在此供应商类型
     *
     * @param supplierType
     * @return
     */
    public Integer getSupplierType(String supplierType);

    /**
     * 模糊查询供应商名称和编码
     *
     * @param name
     * @return
     */
    List<YyGyslist> querySupplierName(String name);

    /**
     * 查询供应商各个类型的分类数
     *
     * @return
     */
    List<SupplierTypeNum> getSupplierTypeNum();

    /**
     * 查询供应商已准入/未准入数
     *
     * @return
     */
    List<SupplierEntryNum> getSupplierEntryNum();

    /**
     * 查询供应商不良记录数
     *
     * @return
     */
    List<SupplierBadNum> getSupplierBadNum();

    /**
     * 查询物资目录列表
     *
     * @param supplierCode
     * @param materialId
     * @param materialName
     * @param factory
     * @return
     */
    PageVO<HisMaterialDir> getHisMaterialDir(PageVO<HisMaterialDir> page, String supplierCode, String materialId, String materialName, String factory);

    /**
     * 查询药品目录列表
     *
     * @param supplierCode
     * @param drugId
     * @param drugName
     * @param factory
     * @return
     */
    PageVO<HisDrugDir> getHisDrugDir(PageVO<HisDrugDir> page, String supplierCode, String drugId, String drugName, String factory);

    /**
     * 新增供应商判断系统是否已经存在
     *
     * @param supplierCode
     * @return
     */
    Result getSupplierCode(String supplierCode);

    SupplierInfo getSupplierBaseInfo(String supplierCode);

    /**
     * 查询供应商业务信息列表
     *
     * @param page
     * @param supplierCode
     * @param mainType
     * @param goodsName
     * @param factoryName
     * @return
     */
    PageVO<HisInboundPay> getHisInboundPay(PageVO<HisInboundPay> page, String supplierCode, Integer mainType, String goodsName, String factoryName);

    /**
     * 查询供应商类型
     *
     * @param supplierCode
     * @return
     */
    List<String> getSupplierCodeType(String supplierCode);

    /**
     * 查询供应商和联系人和附件基本信息
     *
     * @param supplierCode
     * @return
     */
    Supplier getSupplierInfo(String supplierCode);

    /**
     * 查询系统中全部已准入的供应商
     *
     * @return
     */
    List<SupplierInfo> getSupplierEntryAll();
}
